/*
**  arraylib.h
**  使用arraylib时的参考文档
**  arraylib.o对外公开的内容
*/

/*
**  管理整型数组的结构.
**  @elem pBase:数组的起始地址;
**  @elem cnt:有效元素个数,起始值为0;
**  @elem length:数组总长度,起始值为1;
*/
typedef struct _int_array
{
    int *pBase; 
    int cnt;
    int length;
} INT_ARRAY;

/*
**  分配整型数组需要的内存空间并初始化.
**  @param p_iArr:管理整型数组的结构;
**  @param iLength:整型数组的长度(元素个数);
**  @ret   success:true;failed:false;
*/
bool init_int_array(INT_ARRAY *p_iArr, int iLength);

/*
**  销毁数组释放回收内存空间.
**  @param p_iArr:管理整型数组的结构;
**  @ret   void;
*/
void destroy_int_array(INT_ARRAY *p_iArr);

/*
**  取得当前数组中元素个数.
**  @param p_iArr:管理整型数组的结构;
**  @ret   元素个数(int型);
*/
int get_elem_number(INT_ARRAY *p_iArr);

/*
**  打印元素.
**  @param p_iArr:管理整型数组的结构;
*/
void show_elem(INT_ARRAY *p_iArr);

/*
**  追加元素到数组中.
**  @param p_iArr:管理整型数组的结构;
**  @param iElem:追加的元素值;
**  @ret   追加成功:true;追加失败:false;
*/
bool add_elem_to_array(INT_ARRAY *p_iArr, int iElem);

/*
**  删除数组中的最后一个有效元素.
**  @param p_iArr:管理整型数组的结构;
**  @ret   删除成功:true;删除失败:false;
*/
bool delete_elem_from_array(INT_ARRAY *p_iArr);

/*
**  修改数组中的一个有效元素.
**  @param p_iArr:管理整型数组的结构;
**  @param iPos:修改第n个元素,n从1开始;
**  @param iVal:修改元素iPos位置的元素值为iVal;
**  @ret   修改成功:true;修改失败:false;
*/
bool replace_elem_at(INT_ARRAY *p_iArr, int iPos, int iVal);

/*
**  插入一个有效元素到数组中.
**  @param p_iArr:管理整型数组的结构;
**  @param iPos:第n个位置插入元素,n从1开始;
**  @param iVal:插入元素的值为iVal;
**  @ret   插入成功:true;插入失败:false;
*/
bool insert_elem_at(INT_ARRAY *p_iArr, int iPos, int iVal);

/*
**  对数组中有效元素排序.
**  @param p_iArr:管理整型数组的结构;
**  @param iOrd:0:ascending order;1:descending order;
**  @ret   成功:true;失败:false;
*/
#define ORDER_ASC 0
#define ORDER_DES 1
bool sort_int_array(INT_ARRAY *p_iArr, int iOrd);

/*
**  对数组中有效元素逆序.
**  @param p_iArr:管理整型数组的结构;
**  @ret   void
*/
void reverse_int_array(INT_ARRAY *p_iArr);

/*
**  对数组中有效元素进行查找.
**  @param p_iArr:管理整型数组的结构;
**  @param item:要查找的元素值;
**  @param iPos:元素的位置为第n个元素,n从1开始;
**  @ret   找到:true;未找到:false;
*/
bool search_int_array(INT_ARRAY *p_iArr, int item, int *iPos);

/*
**  判满.
**  @param p_iArr:管理整型数组的结构;
**  @ret   已满:true;未满:false;
*/
bool int_array_isFull(INT_ARRAY *p_iArr);

/*
**  判空.
**  @param p_iArr:管理整型数组的结构;
**  @ret   空:true;非空:false;
*/
bool int_array_isEmpty(INT_ARRAY *p_iArr);

/*
**  位置有效性检测.
**  @param p_iArr:管理整型数组的结构;
**  @param iPos:要判定的位置;
**  @ret   有效:true;无效:false;
*/
bool valid_index(INT_ARRAY *p_iArr, int iPos);
